<?php

/**
 * Bbreservalibro form.
 *
 * @package    ingenyo-biblio
 * @subpackage form
 * @author     Your name here
 */
class BbreservalibroForm extends BaseBbreservalibroForm
{

  public function configure()
  {
    unset($this['fechaGenera'], $this['fechaVencimiento'], $this['finalizado'], $this['fechaComienzo']);

    $id_documento = $this->getOption('idDocumento');
    $this->setWidget('idPersona', new pmWidgetFormPropelJQuerySearch(array('model' => 'BbPersona',
        'column' => array('NOMBRESPERSONA', 'APELLIDOPERSONA', 'NRODOCUMENTOPERSONA'),
        'selected_label' => 'Seleccione una persona',
        'search_label' => 'Buscar')));
    $this->getWidget('idPersona')->setLabel('Persona');

    $criteria_libros_disponibles = CtDocumentoPeer::getLibrosDisponibleParaReservaCriteria($id_documento);
    $this->getWidget('idLibro')->setOption('criteria', $criteria_libros_disponibles);
    $this->getWidget('idLibro')->setOption('method', 'getInventariolibroReserva');
    $this->getWidget('idLibro')->setLabel('Inventario');

    $this->getValidator('idPersona')->setOption('required', true);

    $this->validatorSchema->setPostValidator(
      new sfValidatorCallback(array('callback' => array($this, 'validarReserva')))
    );

  }

  public function validarReserva($validator, $values)
  {
    if (!is_null($values['idPersona']))
    {
      $persona = BbPersonaPeer::getPersona($values['idPersona']);
      $documento = CtDocumentoPeer::retrieveByPK($this->getOption('idDocumento'));
      $libro = CtLibroPeer::retrieveByPK($values['idLibro']) ;
      
      if (is_null($persona))
      {
        $error = new sfValidatorError($validator, 'La persona seleccionada no posee un TIPO DE PERSONA.');
        throw new sfValidatorErrorSchema($validator, array('idPersona' => $error));
      }
      elseif ($persona->getIdEstado() == ReferenceEstadoPersona::SUSPENDIDO)
      {
        $error = new sfValidatorError($validator, 'La persona seleccionada se encuentra actualmente SUSPENDIDA.');
        throw new sfValidatorErrorSchema($validator, array('idPersona' => $error));
      }
      elseif (CtDocumentoPeer::getCantidadEjemplares ($documento->getId ())== 1)
      {
        $error = new sfValidatorError($validator, 'Queda disponible un solo ejemplar y NO puede ser reservado.');
        throw new sfValidatorErrorSchema($validator, array('idLibro' => $error));
      }
      elseif ($libro->getCantReservasVigentes() >= 3)
      {
        $error = new sfValidatorError($validator, 'El libro posee 3 reservas vigentes.');
        throw new sfValidatorErrorSchema($validator, array('idLibro' => $error));
      }
    }

    return $values;

  }

  public function doSave($con = null)
  {
 
    parent::doSave($con);

    #Cambiamos el estado del libro a reservad
    $libro = $this->getObject()->getLibro();
    if ($libro->getEstadolibro() == ReferenceEstadoLibro::ACTIVO){
      $libro->setEstadoReservado();
      $libro->save($con);
    }
    
    #$reserva->save($con);

  }

}
